﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using SGC.BE;
using System.Data.SqlClient;
using System.Data;
using System.Configuration;

namespace SGC.DL.DL_CcuActualizarPlanAuditoria
{
    public class DL_CcuActualizarPlanAuditoria
    {

        static string Str_ConSql = ConfigurationManager.ConnectionStrings["Cn_Sql"].ToString();
        static SqlConnection sCn_Ap = new SqlConnection(Str_ConSql);

        public static List<BE_PlanAuditoria> obtenerPlanesAuditoria_DL()
        {
            BE_PlanAuditoria objPlanAuditoria = null;
            List<BE_PlanAuditoria> lstPlanes = new List<BE_PlanAuditoria>();
            using (SqlCommand sCmd_Sp = new SqlCommand())
            {
                sCmd_Sp.CommandType = CommandType.Text;
                sCmd_Sp.CommandText = "SELECT * FROM TB_PLAN_AUDITORIA";
                sCmd_Sp.Connection = sCn_Ap;
                if (sCn_Ap.State == ConnectionState.Open)
                {
                    sCn_Ap.Close();
                }
                sCn_Ap.Open();
                SqlDataReader sDar_Datos;

                sDar_Datos = sCmd_Sp.ExecuteReader();
                while (sDar_Datos.Read())
                {
                    objPlanAuditoria = new BE_PlanAuditoria();
                    objPlanAuditoria.CODIGO_PLAN = sDar_Datos["IDPLAN_AUDITORIA"].ToString();
                    objPlanAuditoria.VERSION_PLAN = decimal.Parse(sDar_Datos["VERSION"].ToString());
                    objPlanAuditoria.FECHA = DateTime.Parse(sDar_Datos["FECHA"].ToString());
                    objPlanAuditoria.ALCANCE = sDar_Datos["ALCANCE"].ToString();
                    objPlanAuditoria.OBJETIVO = sDar_Datos["OBJETIVO"].ToString();
                    objPlanAuditoria.AUDITADO = Boolean.Parse(sDar_Datos["AUDITADO"].ToString());
                    lstPlanes.Add(objPlanAuditoria);
                }
                sCn_Ap.Close();
            }
            return lstPlanes;
        }

        public static List<BE_Empleado> obtenerAuditores_DL()
        {
            BE_Empleado objEmpleado = null;
            List<BE_Empleado> lstEmpleados = new List<BE_Empleado>();
            using (SqlCommand sCmd_Sp = new SqlCommand())
            {
                sCmd_Sp.CommandType = CommandType.Text;
                sCmd_Sp.CommandText = "SELECT * FROM TB_EMPLEADO";
                sCmd_Sp.Connection = sCn_Ap;
                sCn_Ap.Open();
                SqlDataReader sDar_Datos;

                sDar_Datos = sCmd_Sp.ExecuteReader();
                while (sDar_Datos.Read())
                {
                    objEmpleado = new BE_Empleado();
                    objEmpleado.CODIGO_EMP = sDar_Datos["IDEMPLEADO"].ToString();
                    objEmpleado.NOMBRE_EMP = sDar_Datos["NOMBRE"].ToString();
                    lstEmpleados.Add(objEmpleado);
                }
                sCn_Ap.Close();
            }
            return lstEmpleados;
        }

        public static List<BE_PlanAuditor> obtenerAuditoresPorPlan_DL(BE_PlanAuditoria objPlan)
        {
            BE_PlanAuditor objPlanAuditor = null;
            List<BE_PlanAuditor> lstPlanAuditorDetalle = new List<BE_PlanAuditor>();
            using (SqlCommand sCmd_Sp = new SqlCommand())
            {
                sCmd_Sp.CommandType = CommandType.Text;
                sCmd_Sp.CommandText = "SELECT * FROM TB_PLAN_AUDITOR WHERE IDPLAN_AUDITORIA = @PLAN";
                sCmd_Sp.Connection = sCn_Ap;
                sCn_Ap.Open();
                SqlDataReader sDar_Datos;

                SqlParameter oParm1 = new SqlParameter("@PLAN", SqlDbType.Char, 6);
                oParm1.Direction = ParameterDirection.Input;
                sCmd_Sp.Parameters.Add(oParm1);
                sCmd_Sp.Parameters["@PLAN"].Value = objPlan.CODIGO_PLAN;

                sDar_Datos = sCmd_Sp.ExecuteReader();
                while (sDar_Datos.Read())
                {
                    objPlanAuditor = new BE_PlanAuditor();
                    objPlanAuditor.LIDER = Boolean.Parse(sDar_Datos["LIDER"].ToString());
                    objPlanAuditor.PLAN = sDar_Datos["IDPLAN_AUDITORIA"].ToString();
                    objPlanAuditor.AUDITOR = sDar_Datos["IDEMPLEADO"].ToString();
                    objPlanAuditor.FECHA = DateTime.Parse(sDar_Datos["FECHA"].ToString());
                    lstPlanAuditorDetalle.Add(objPlanAuditor);
                }
                sCn_Ap.Close();
            }
            return lstPlanAuditorDetalle;
        }

        public static int registrarPlanAuditor_DL(BE_PlanAuditor objPlanAud, Boolean Accion, ref String strError)
        {
            strError = "";
            int Int_Valret = 0;
            using (SqlCommand sCmd_Sp = new SqlCommand())
            {
                sCmd_Sp.CommandType = CommandType.StoredProcedure;
                sCmd_Sp.CommandText = "UPDATE_PLAN_AUDITOR";
                sCmd_Sp.Connection = sCn_Ap;
                sCn_Ap.Open();

                #region Parámetros

                SqlParameter oParm1 = new SqlParameter("@PLAN", SqlDbType.Char, 6);
                oParm1.Direction = ParameterDirection.Input;
                sCmd_Sp.Parameters.Add(oParm1);
                sCmd_Sp.Parameters["@PLAN"].Value = objPlanAud.PLAN;

                oParm1 = new SqlParameter("@EMP", SqlDbType.Char, 8);
                oParm1.Direction = ParameterDirection.Input;
                sCmd_Sp.Parameters.Add(oParm1);
                sCmd_Sp.Parameters["@EMP"].Value = objPlanAud.AUDITOR;

                oParm1 = new SqlParameter("@LIDER", SqlDbType.Bit);
                oParm1.Direction = ParameterDirection.Input;
                sCmd_Sp.Parameters.Add(oParm1);
                sCmd_Sp.Parameters["@LIDER"].Value = objPlanAud.LIDER;

                oParm1 = new SqlParameter("@ACC", SqlDbType.Bit);
                oParm1.Direction = ParameterDirection.Input;
                sCmd_Sp.Parameters.Add(oParm1);
                sCmd_Sp.Parameters["@ACC"].Value = Accion;
                
                #endregion

                try
                {
                    Int_Valret = sCmd_Sp.ExecuteNonQuery();
                }
                catch (Exception ex)
                {
                    strError = ex.Message;
                }                
                sCn_Ap.Close();
                return Int_Valret;
            }
        }

        public static int actualizarAuditorLider_DL(BE_PlanAuditor objPlanAud, Boolean Accion, ref String strError)
        {
            strError = "";
            int Int_Valret = 0;
            using (SqlCommand sCmd_Sp = new SqlCommand())
            {
                sCmd_Sp.CommandType = CommandType.StoredProcedure;
                sCmd_Sp.CommandText = "UPDATE_AUDITOR_LIDER";
                sCmd_Sp.Connection = sCn_Ap;
                sCn_Ap.Open();

                #region Parámetros

                SqlParameter oParm1 = new SqlParameter("@PLAN", SqlDbType.Char, 6);
                oParm1.Direction = ParameterDirection.Input;
                sCmd_Sp.Parameters.Add(oParm1);
                sCmd_Sp.Parameters["@PLAN"].Value = objPlanAud.PLAN;

                oParm1 = new SqlParameter("@EMP", SqlDbType.Char, 8);
                oParm1.Direction = ParameterDirection.Input;
                sCmd_Sp.Parameters.Add(oParm1);
                sCmd_Sp.Parameters["@EMP"].Value = objPlanAud.AUDITOR;
                
                #endregion

                try
                {
                    Int_Valret = sCmd_Sp.ExecuteNonQuery();
                }
                catch (Exception ex)
                {
                    strError = ex.Message;
                }
                sCn_Ap.Close();
                return Int_Valret;
            }
        }

        public static int registrarPlanAuditoria_BL(BE_PlanAuditoria objPlanAud, String Proceso)
        {
            using (SqlCommand sCmd_Sp = new SqlCommand())
            {
                sCmd_Sp.CommandType = CommandType.StoredProcedure;
                sCmd_Sp.CommandText = "UPDATE_PLAN_AUDITORIA";
                sCmd_Sp.Connection = sCn_Ap;
                sCn_Ap.Open();

                #region Parámetros

                SqlParameter oParm1 = new SqlParameter("@PLAN", SqlDbType.Char, 6);
                oParm1.Direction = ParameterDirection.Input;
                sCmd_Sp.Parameters.Add(oParm1);
                sCmd_Sp.Parameters["@PLAN"].Value = objPlanAud.CODIGO_PLAN;

                oParm1 = new SqlParameter("@VERSION", SqlDbType.Int);
                oParm1.Direction = ParameterDirection.Input;
                sCmd_Sp.Parameters.Add(oParm1);
                sCmd_Sp.Parameters["@VERSION"].Value = objPlanAud.VERSION_PLAN;

                oParm1 = new SqlParameter("@FECHA", SqlDbType.SmallDateTime);
                oParm1.Direction = ParameterDirection.Input;
                sCmd_Sp.Parameters.Add(oParm1);
                sCmd_Sp.Parameters["@FECHA"].Value = objPlanAud.FECHA;

                oParm1 = new SqlParameter("@ALCANCE", SqlDbType.VarChar, 150);
                oParm1.Direction = ParameterDirection.Input;
                sCmd_Sp.Parameters.Add(oParm1);
                sCmd_Sp.Parameters["@ALCANCE"].Value = objPlanAud.ALCANCE;

                oParm1 = new SqlParameter("@OBJETIVO", SqlDbType.VarChar, 150);
                oParm1.Direction = ParameterDirection.Input;
                sCmd_Sp.Parameters.Add(oParm1);
                sCmd_Sp.Parameters["@OBJETIVO"].Value = objPlanAud.OBJETIVO;

                oParm1 = new SqlParameter("@CODIGO_PROCESO", SqlDbType.VarChar, 5);
                oParm1.Direction = ParameterDirection.Input;
                sCmd_Sp.Parameters.Add(oParm1);
                sCmd_Sp.Parameters["@CODIGO_PROCESO"].Value = Proceso;

                #endregion

                int Int_Valret = sCmd_Sp.ExecuteNonQuery();
                sCn_Ap.Close();
                return Int_Valret;
            }
        }

        public static int registrarDetallePlan_DL(BE_DetallePlanAuditoria objDetallePlan, Boolean Accion, ref String strError)
        {
            strError = "";
            int intValret = 0;
            try
            {
                using (SqlCommand sCmd_Sp = new SqlCommand())
                {
                    sCmd_Sp.CommandType = CommandType.StoredProcedure;
                    sCmd_Sp.CommandText = "UPDATE_DETALLE_PLAN_AUDITORIA";
                    sCmd_Sp.Connection = sCn_Ap;
                    sCn_Ap.Open();

                    #region Parámetros

                    SqlParameter oParm1 = new SqlParameter("@CODIGO_PLAN", SqlDbType.Char, 6);
                    oParm1.Direction = ParameterDirection.Input;
                    sCmd_Sp.Parameters.Add(oParm1);
                    sCmd_Sp.Parameters["@CODIGO_PLAN"].Value = objDetallePlan.CODIGO_PLAN;

                    oParm1 = new SqlParameter("@CODIGO_PROC", SqlDbType.Char, 10);
                    oParm1.Direction = ParameterDirection.Input;
                    sCmd_Sp.Parameters.Add(oParm1);
                    sCmd_Sp.Parameters["@CODIGO_PROC"].Value = objDetallePlan.CODIGO_PROC;

                    oParm1 = new SqlParameter("@CODIGO_CHECK", SqlDbType.Char, 10);
                    oParm1.Direction = ParameterDirection.Input;
                    sCmd_Sp.Parameters.Add(oParm1);
                    sCmd_Sp.Parameters["@CODIGO_CHECK"].Value = objDetallePlan.CODIGO_CHECK;

                    oParm1 = new SqlParameter("@ACC", SqlDbType.Bit);
                    oParm1.Direction = ParameterDirection.Input;
                    sCmd_Sp.Parameters.Add(oParm1);
                    sCmd_Sp.Parameters["@ACC"].Value = Accion;

                    #endregion

                    intValret = sCmd_Sp.ExecuteNonQuery();                   
                }
            }
            catch (Exception ex)
            {
                strError = ex.Message;
            }
            finally
            {
                if (sCn_Ap.State == ConnectionState.Open)
                {
                    sCn_Ap.Close();
                }
            }
            return intValret;
        }

        public static int registrarPlanProcesoArea_DL(BE_PlanProcesoArea objProcesoArea, Boolean Accion, ref String strError)
        {
            strError = "";
            int Int_Valret = 0;
            try
            {

                using (SqlCommand sCmd_Sp = new SqlCommand())
                {
                    sCmd_Sp.CommandType = CommandType.StoredProcedure;
                    sCmd_Sp.CommandText = "UPDATE_PLAN_PROCESO_AREA";
                    sCmd_Sp.Connection = sCn_Ap;
                    sCn_Ap.Open();

                    #region Parámetros

                    SqlParameter oParm1 = new SqlParameter("@CODIGO_AREA", SqlDbType.Char, 4);
                    oParm1.Direction = ParameterDirection.Input;
                    sCmd_Sp.Parameters.Add(oParm1);
                    sCmd_Sp.Parameters["@CODIGO_AREA"].Value = objProcesoArea.AREA.CODIGO_AREA;

                    oParm1 = new SqlParameter("@CODIGO_PROCESO", SqlDbType.Char, 5);
                    oParm1.Direction = ParameterDirection.Input;
                    sCmd_Sp.Parameters.Add(oParm1);
                    sCmd_Sp.Parameters["@CODIGO_PROCESO"].Value = objProcesoArea.PROCESO.CODIGO_PROCESO;

                    oParm1 = new SqlParameter("@CODIGO_PLAN", SqlDbType.Char, 6);
                    oParm1.Direction = ParameterDirection.Input;
                    sCmd_Sp.Parameters.Add(oParm1);
                    sCmd_Sp.Parameters["@CODIGO_PLAN"].Value = objProcesoArea.PLAN_AUDITORIA.CODIGO_PLAN;

                    oParm1 = new SqlParameter("@ACC", SqlDbType.Bit);
                    oParm1.Direction = ParameterDirection.Input;
                    sCmd_Sp.Parameters.Add(oParm1);
                    sCmd_Sp.Parameters["@ACC"].Value = Accion;

                    #endregion

                    Int_Valret = sCmd_Sp.ExecuteNonQuery();
                }
            }
            catch (Exception ex)
            {
                strError = ex.Message;
            }
            finally
            {
                if (sCn_Ap.State == ConnectionState.Open)
                {
                    sCn_Ap.Close();
                }
            }
            return Int_Valret;
        }

        public static List<BE_Proceso> obtenerProcesos_DL()
        {
            BE_Proceso objProceso = null;
            List<BE_Proceso> lstProcesos = new List<BE_Proceso>();
            using (SqlCommand sCmd_Sp = new SqlCommand())
            {
                sCmd_Sp.CommandType = CommandType.Text;
                sCmd_Sp.CommandText = "SELECT * FROM TB_PROCESO";
                sCmd_Sp.Connection = sCn_Ap;
                if (sCn_Ap.State== ConnectionState.Open)
                {
                    sCn_Ap.Close();
                }
                sCn_Ap.Open();
                SqlDataReader sDar_Datos;

                sDar_Datos = sCmd_Sp.ExecuteReader();
                while (sDar_Datos.Read())
                {
                    objProceso = new BE_Proceso();
                    objProceso.CODIGO_PROCESO = sDar_Datos["IDPROCESO"].ToString();
                    objProceso.NOMBRE = sDar_Datos["NOMBRE"].ToString();                    
                    lstProcesos.Add(objProceso);
                }
                sCn_Ap.Close();
            }
            return lstProcesos;
        }

        public static List<BE_ProcesoArea> obtenerProcesosAreas_DL(BE_ProcesoArea objProceso)
        {
            BE_ProcesoArea objProcesoArea = null;
            List<BE_ProcesoArea> lstProcesosAreas = new List<BE_ProcesoArea>();
            using (SqlCommand sCmd_Sp = new SqlCommand())
            {
                sCmd_Sp.CommandType = CommandType.Text;
                sCmd_Sp.CommandText = "SELECT IDPROCESO, P.IDAREA, A.NOMBRE FROM TB_AREA_PROCESO P " +
                    "INNER JOIN TB_AREA A ON (P.IDAREA = A.IDAREA) WHERE IDPROCESO = @PROCESO";
                sCmd_Sp.Connection = sCn_Ap;
                sCn_Ap.Open();
                SqlDataReader sDar_Datos;

                SqlParameter oParm1 = new SqlParameter("@PROCESO", SqlDbType.Char, 5);
                oParm1.Direction = ParameterDirection.Input;
                sCmd_Sp.Parameters.Add(oParm1);
                sCmd_Sp.Parameters["@PROCESO"].Value = objProceso.PROCESO.CODIGO_PROCESO;

                sDar_Datos = sCmd_Sp.ExecuteReader();
                while (sDar_Datos.Read())
                {
                    objProcesoArea = new BE_ProcesoArea();
                    BE_Proceso objProceso_n = new BE_Proceso();
                    objProceso_n.CODIGO_PROCESO = sDar_Datos["IDPROCESO"].ToString();
                    objProcesoArea.PROCESO = objProceso_n;

                    BE_Area objArea_n = new BE_Area();
                    objArea_n.CODIGO_AREA = sDar_Datos["IDAREA"].ToString();
                    objProcesoArea.AREA = objArea_n;

                    objProcesoArea.AREA.NOMBRE = sDar_Datos["NOMBRE"].ToString();
                    lstProcesosAreas.Add(objProcesoArea);
                }
                sCn_Ap.Close();
            }
            return lstProcesosAreas;
        }
        
        public static List<BE_Procedimiento> obtenerProcedimientos_DL(BE_Procedimiento objProceso)
        {
            BE_Procedimiento objProcedimiento = null;
            List<BE_Procedimiento> lstProcedimientos = new List<BE_Procedimiento>();
            using (SqlCommand sCmd_Sp = new SqlCommand())
            {
                sCmd_Sp.CommandType = CommandType.Text;
                sCmd_Sp.CommandText = "SELECT R.IDPROCESO, P.IDPROCEDIMIENTO, P.NOMBRE FROM TB_PROCESO R INNER JOIN TB_PROCEDIMIENTO P " + 
                    " ON (P.IDPROCESO = R.IDPROCESO) WHERE R.IDPROCESO = @PROCESO";
                sCmd_Sp.Connection = sCn_Ap;
                sCn_Ap.Open();
                SqlDataReader sDar_Datos;

                SqlParameter oParm1 = new SqlParameter("@PROCESO", SqlDbType.Char, 5);
                oParm1.Direction = ParameterDirection.Input;
                sCmd_Sp.Parameters.Add(oParm1);
                sCmd_Sp.Parameters["@PROCESO"].Value = objProceso.CODIGO_PROCESO;

                sDar_Datos = sCmd_Sp.ExecuteReader();
                while (sDar_Datos.Read())
                {
                    objProcedimiento = new BE_Procedimiento();
                    objProcedimiento.CODIGO_PROCESO = sDar_Datos["IDPROCESO"].ToString();
                    objProcedimiento.CODIGO_PROC = sDar_Datos["IDPROCEDIMIENTO"].ToString();
                    objProcedimiento.NOMBRE = sDar_Datos["NOMBRE"].ToString();
                    lstProcedimientos.Add(objProcedimiento);
                }
                sCn_Ap.Close();
            }
            return lstProcedimientos;
        }
       
        public static List<BE_CheckListProcedimiento> obtenerProcedimientosChecklist_DL(BE_CheckListProcedimiento objProcedimiento)
        {
            BE_CheckListProcedimiento objProcedimientoCheck = null;
            List<BE_CheckListProcedimiento> lstProcedimientosCheck = new List<BE_CheckListProcedimiento>();
            using (SqlCommand sCmd_Sp = new SqlCommand())
            {
                sCmd_Sp.CommandType = CommandType.StoredProcedure;
                sCmd_Sp.CommandText = "LISTAR_CHECKLIST_PROC";                    
                sCmd_Sp.Connection = sCn_Ap;
                sCn_Ap.Open();
                SqlDataReader sDar_Datos;

                SqlParameter oParm1 = new SqlParameter("@PROCEDIMIENTO", SqlDbType.Char, 100);
                oParm1.Direction = ParameterDirection.Input;
                sCmd_Sp.Parameters.Add(oParm1);
                sCmd_Sp.Parameters["@PROCEDIMIENTO"].Value = objProcedimiento.CODIGO_PROC;

                sDar_Datos = sCmd_Sp.ExecuteReader();
                while (sDar_Datos.Read())
                {
                    objProcedimientoCheck = new BE_CheckListProcedimiento();
                    objProcedimientoCheck.CODIGO_PROC = sDar_Datos["IDPROCEDIMIENTO"].ToString();
                    objProcedimientoCheck.VALOR_ESPERADO = sDar_Datos["VALOR_ESPERADO"].ToString();
                    objProcedimientoCheck.NOMBRE = sDar_Datos["NOMBRE"].ToString();
                    objProcedimientoCheck.CODIGO_CHECK = sDar_Datos["IDCHECKLIST"].ToString();
                    objProcedimientoCheck.DESCRIPCION = sDar_Datos["DESCRIPCION"].ToString();
                    lstProcedimientosCheck.Add(objProcedimientoCheck);
                }
                sCn_Ap.Close();
            }
            return lstProcedimientosCheck;
        }

        public static BE_PlanAuditoria generarPlanAuditoria_DL(string IDPROCESO, string IDPLAN)
        {
            BE_PlanAuditoria objPlan = new BE_PlanAuditoria();
            using (SqlCommand sCmd_Sp = new SqlCommand())
            {
                sCmd_Sp.CommandType = CommandType.StoredProcedure;
                sCmd_Sp.CommandText = "GENERAR_PLAN_AUDITORIA";
                sCmd_Sp.Connection = sCn_Ap;
                sCn_Ap.Open();

                SqlParameter oParm1 = new SqlParameter("@CODIGO_PROCESO", SqlDbType.Char, 5);
                oParm1.Direction = ParameterDirection.Input;
                sCmd_Sp.Parameters.Add(oParm1);
                sCmd_Sp.Parameters["@CODIGO_PROCESO"].Value = IDPROCESO;

                oParm1 = new SqlParameter("@CODIGO_PLAN", SqlDbType.Char, 6);
                oParm1.Direction = ParameterDirection.Input;
                sCmd_Sp.Parameters.Add(oParm1);
                sCmd_Sp.Parameters["@CODIGO_PLAN"].Value = IDPLAN;

                try
                {
                    objPlan.CODIGO_PLAN = sCmd_Sp.ExecuteScalar().ToString();
                }
                catch (Exception ex)
                {

                }
                finally
                {
                    sCn_Ap.Close();
                }                
            }
            return objPlan;
        }
        
        public static List<BE_ProcesoArea> obtenerProcesosAreasGrabados_DL(BE_PlanAuditoria objPlan)
        {
            BE_ProcesoArea objProcesoArea = null;
            List<BE_ProcesoArea> lstProcesosAreas = new List<BE_ProcesoArea>();
            using (SqlCommand sCmd_Sp = new SqlCommand())
            {
                sCmd_Sp.CommandType = CommandType.Text;
                sCmd_Sp.CommandText = "SELECT IDPROCESO, IDPLAN_AUDITORIA FROM tb_PLAN_AREA WHERE IDPLAN_AUDITORIA = @PLAN";
                sCmd_Sp.Connection = sCn_Ap;
                sCn_Ap.Open();
                SqlDataReader sDar_Datos;

                SqlParameter oParm1 = new SqlParameter("@PLAN", SqlDbType.Char, 6);
                oParm1.Direction = ParameterDirection.Input;
                sCmd_Sp.Parameters.Add(oParm1);
                sCmd_Sp.Parameters["@PLAN"].Value = objPlan.CODIGO_PLAN;

                sDar_Datos = sCmd_Sp.ExecuteReader();
                while (sDar_Datos.Read())
                {
                    objProcesoArea = new BE_ProcesoArea();

                    BE_Proceso objProc_n = new BE_Proceso();
                    objProc_n.CODIGO_PROCESO = sDar_Datos["IDPROCESO"].ToString();

                    BE_Area objArea_n = new BE_Area();
                    objArea_n.CODIGO_AREA = sDar_Datos["IDPLAN_AUDITORIA"].ToString();

                    objProcesoArea.PROCESO = objProc_n;
                    objProcesoArea.AREA = objArea_n;
                    lstProcesosAreas.Add(objProcesoArea);
                }
                sCn_Ap.Close();
            }
            return lstProcesosAreas;
        }
        
        public static List<BE_Procedimiento> obtenerDetallePlanAuditoria_DL(BE_PlanAuditoria objPlan)
        {
            BE_Procedimiento objProcedimiento = null;
            List<BE_Procedimiento> lstProcs = new List<BE_Procedimiento>();
            using (SqlCommand sCmd_Sp = new SqlCommand())
            {
                sCmd_Sp.CommandType = CommandType.Text;
                sCmd_Sp.CommandText = "SELECT DISTINCT IDPROCEDIMIENTO FROM TB_DETALLE_PLAN_AUDITORIA D WHERE IDPLAN_AUDITORIA = @PLAN";
                sCmd_Sp.Connection = sCn_Ap;
                sCn_Ap.Open();
                SqlDataReader sDar_Datos;

                SqlParameter oParm1 = new SqlParameter("@PLAN", SqlDbType.Char, 6);
                oParm1.Direction = ParameterDirection.Input;
                sCmd_Sp.Parameters.Add(oParm1);
                sCmd_Sp.Parameters["@PLAN"].Value = objPlan.CODIGO_PLAN;

                sDar_Datos = sCmd_Sp.ExecuteReader();
                while (sDar_Datos.Read())
                {
                    objProcedimiento = new BE_Procedimiento();
                    objProcedimiento.CODIGO_PROC = sDar_Datos["IDPROCEDIMIENTO"].ToString();
                    lstProcs.Add(objProcedimiento);
                }
                sCn_Ap.Close();
            }
            return lstProcs;
        }

        public static List<BE_DetallePlanAuditoria> obtenerCheckProcedimientoPlan_DL(BE_PlanAuditoria objPlan)
        {
            BE_DetallePlanAuditoria objDetalle = null;
            List<BE_DetallePlanAuditoria> lstDetalles = new List<BE_DetallePlanAuditoria>();
            using (SqlCommand sCmd_Sp = new SqlCommand())
            {
                sCmd_Sp.CommandType = CommandType.Text;
                sCmd_Sp.CommandText = "SELECT IDCHECKLIST, IDPROCEDIMIENTO FROM TB_DETALLE_PLAN_AUDITORIA D " + 
                    "WHERE IDPLAN_AUDITORIA = @PLAN";
                sCmd_Sp.Connection = sCn_Ap;
                sCn_Ap.Open();
                SqlDataReader sDar_Datos;

                SqlParameter oParm1 = new SqlParameter("@PLAN", SqlDbType.Char, 6);
                oParm1.Direction = ParameterDirection.Input;
                sCmd_Sp.Parameters.Add(oParm1);
                sCmd_Sp.Parameters["@PLAN"].Value = objPlan.CODIGO_PLAN;

                sDar_Datos = sCmd_Sp.ExecuteReader();
                while (sDar_Datos.Read())
                {
                    objDetalle = new BE_DetallePlanAuditoria();
                    objDetalle.CODIGO_PROC = sDar_Datos["IDPROCEDIMIENTO"].ToString();
                    objDetalle.CODIGO_CHECK = sDar_Datos["IDCHECKLIST"].ToString();
                    lstDetalles.Add(objDetalle);
                }
                sCn_Ap.Close();
            }
            return lstDetalles;
        }

        public static BE_PlanAuditoria obtenerPlanCargado_DL(BE_PlanAuditoria objPlan, ref String Proceso)
        {
            BE_PlanAuditoria objPlanCargado = new BE_PlanAuditoria();
            using (SqlCommand sCmd_Sp = new SqlCommand())
            {
                sCmd_Sp.CommandType = CommandType.Text;
                sCmd_Sp.CommandText = "SELECT * FROM TB_PLAN_AUDITORIA WHERE IDPLAN_AUDITORIA = @PLAN";
                sCmd_Sp.Connection = sCn_Ap;
                sCn_Ap.Open();
                SqlDataReader sDar_Datos;

                SqlParameter oParm1 = new SqlParameter("@PLAN", SqlDbType.Char, 6);
                oParm1.Direction = ParameterDirection.Input;
                sCmd_Sp.Parameters.Add(oParm1);
                sCmd_Sp.Parameters["@PLAN"].Value = objPlan.CODIGO_PLAN;

                sDar_Datos = sCmd_Sp.ExecuteReader();
                while (sDar_Datos.Read())
                {
                    objPlanCargado.VERSION_PLAN = Decimal.Parse(sDar_Datos["VERSION"].ToString());
                    objPlanCargado.FECHA = DateTime.Parse(sDar_Datos["FECHA"].ToString());
                    objPlanCargado.ALCANCE = sDar_Datos["ALCANCE"].ToString();
                    objPlanCargado.OBJETIVO = sDar_Datos["OBJETIVO"].ToString();
                    Proceso = sDar_Datos["IDPROCESO"].ToString();
                }
                sCn_Ap.Close();
            }
            return objPlanCargado;
        }

    }
}
